package thread;

/**
 * @author Dianzhi Han
 * @version 1.0
 * @description: 通过内置的属性中断线程（第二种方法）（这里可以通过静态方法也可以通过成员方法，区别可以看另一个类）
 * @date 2022/10/27 23:10
 */
public class ThreadInterruptedByMethod {
    private static class MyRunnable implements Runnable {
        @Override
        public void run() {
            // 静态方法，判断当前线程是否被中断了
//            while (!Thread.interrupted()) {
            // 成员方法，判断当前线程对象是否被中断了
            while (!Thread.currentThread().isInterrupted()) {
                System.out.println(Thread.currentThread().getName() + "别烦我，正对线呢!!");
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    // 当线程被中断时，会抛出中断异常
                    // 抛出中断异常之后，中断状态就会还原!
                    System.err.println("蛮子在偷家！！！！");
                    break;
                }
            }
            System.out.println(Thread.currentThread().getName() + "糟了，水晶被偷了，凉了~");
        }
    }
    public static void main(String[] args) throws InterruptedException {
        MyRunnable mt = new MyRunnable();
        Thread thread = new Thread(mt,"VN线程");
        System.out.println("VN正在对线");
        thread.start();
        Thread.sleep(5 * 1000);
        // 中断子线程
        // 调用此方法就会将子线程的状态置为中断状态
        thread.interrupt();
    }
}